/**
 * 扩展运行环境信息（只负责“检测并缓存”）
 * - 目标：在扩展加载时即可稳定拿到并缓存 extensionId/origin
 * - 约束：不依赖项目内其他模块，避免循环依赖
 */

let cachedExtensionId: string | null = null;
let cachedExtensionOrigin: string | null = null;

/**
 * 初始化并缓存扩展ID与Origin（可重复调用，无副作用）
 */
export function initExtensionEnv(): void {
    // 已缓存则跳过
    if (cachedExtensionId && cachedExtensionOrigin) return;

    try {
        // 首选：chrome.runtime.id（最直接）
        const id = (typeof chrome !== 'undefined' && chrome?.runtime?.id) ? chrome.runtime.id : null;
        if (id) {
            cachedExtensionId = id;
            cachedExtensionOrigin = `chrome-extension://${id}`;
            return;
        }

        // 兜底1：从 runtime.getURL("") 解析
        const base = (typeof chrome !== 'undefined' && chrome?.runtime?.getURL)
            ? chrome.runtime.getURL("")
            : null;
        if (base) {
            const u = new URL(base);
            cachedExtensionId = u.host || null;
            cachedExtensionOrigin = `${u.protocol}//${u.host}`;
            return;
        }

        // 兜底2：在扩展页面内从 location 推断
        if (typeof location !== 'undefined' && location.protocol === 'chrome-extension:') {
            cachedExtensionId = location.host || null;
            cachedExtensionOrigin = `${location.protocol}//${location.host}`;
            return;
        }
    } catch {
        // 忽略错误，保持为 null
    }
}

/** 获取扩展ID（若未初始化会尝试懒加载解析） */
export function getExtensionId(): string | null {
    if (!cachedExtensionId) initExtensionEnv();
    return cachedExtensionId;
}

/** 获取扩展Origin（如：chrome-extension://<id>） */
export function getExtensionOrigin(): string | null {
    if (!cachedExtensionOrigin) initExtensionEnv();
    return cachedExtensionOrigin;
}

/** 仅返回已缓存值（不触发解析） */
export function getCached(): { id: string | null; origin: string | null } {
    return { id: cachedExtensionId, origin: cachedExtensionOrigin };
}

